#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
#include<stdlib.h>

using std::cout, std::endl;

//环境变量
char *const addenv[] = {
    "MYVAL1=1234",
    "MYVAL2=5678",
    nullptr
};

int main()
{
    cout << "进程开始" << endl;
    sleep(1);
    pid_t id = fork();

    if(id == 0)//子进程
    {
        sleep(1);
        printf("子进程, pid: %d, ppid: %d\n", getpid(), getppid());
        //命令行参数表
        char *const argv[] = {
            "other",
            "-a",
            "-b",
            nullptr
        };

        for(int i = 0; addenv[i]; i++)
        {
            putenv(addenv[i]);
        }

        // extern char **environ;
        // execvpe("./other", argv, environ);
        execvp("./other", argv);

        exit(88);                
    }

    //父进程
    int status = 0;
    pid_t ret = waitpid(-1, &status, 0);
    printf("子进程%d的退出状态: %d\n", ret, WEXITSTATUS(status));

    printf("父进程, pid: %d, ppid: %d\n", getpid(), getppid());


    return 0;
}

